#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021-01-30
# @Author: Sunny
# ========================

"""
实现一个网络请求超时重试的装饰器
如果请求网络超时，或者连接超时，可以重新发送请求，如果重试三次之后还是超时，抛出对应的异常

"""
# import requests
#
#
# def timeout(fun):
#     def warpeer(*args, **kwargs):
#         for i in range(3):
#             try:
#                 if i < 3:
#                     print(f'--------------第{i + 1}次请求------------')
#                     fun(*args, **kwargs)
#             except (requests.exceptions.ConnectTimeout, requests.exceptions.Timeout) as e:
#                 print(e)
#                 print(f'--------------第{i + 1}次请求出现了网络超时，现重新请求------------')
#                 if i == 2:
#                     raise
#             else:
#                 break
#
#     return warpeer
#
#
# @timeout
# def request_http(url):
#     return requests.get(url, timeout=0.01)
#
#
# request_http('https://www.baidu.com/')

# 2、 请设计一个装饰器 ,可以给函数扩展登录认证的功能（提示数账号密码，然后进行校验），
# 多个函数同时使用这个装饰器， 调用函数的时候，只要登录成功一次，
# 后续的函数无需再进行登录（默认的认证账号：qwe123，密码：123456）


status={'token':False}
def login_token(fun):

    def warpper(*args,**kwargs):
        if status['token']:
            fun(*args,**kwargs)
        else:
            print('---------登录页面---------')
            user = input('清输入你的账户：')
            psw = input('请输入你的密码：')
            if user == 'qwe123' and psw == '123456':
                print('登陆成功')
                status['token'] = True
                fun(*args, **kwargs)
            else:
                print('账号或者密码有误')

    return warpper



@login_token
def num1(a,b):
    print(a+b)

@login_token
def num2(a,b,c):
    print(a*b*c)

num1(1,2)
num2(1,2,3)

# 请设置一个装饰器，接收一个int类型的参数number,可以用来装饰装饰任何的函数
# 如果函数运行的时间大于number，则打印出函数名和函数的运行时间
